//home小仓库

import { reqGoodInfo, reqAddOrUpdateShopCart, reqDeleteCartById } from '@/api'
import { getUUID } from "@/utils/uuid_token";
//仓库
//actions：处理actions，可以书写自己的业务逻辑，也可以处理异步
const actions = {


    //用户进入TypeNav组件中，用mounted挂载，调用了categoryList()此方法
    //然后再调用reqCategoryList();这是api下的index.js配置的方法
    async getGoodInfo({ commit }, skuId) {     //async 是 JavaScript 中用于定义异步函数的关键字。
        //async和await同时存在
        //当一个网络请求返回状态码(code)为 200 时，这表示请求已成功。
        let result = await reqGoodInfo(skuId);
        // console.log(this.result.code);
        if (result.code == 200) {
            commit('GOODINFO', result.data)
        }
    },
    //发送购物车数据
    async getAddOrUpdateShopCart({ commit }, { skuId, skuNum }) {
        let result = await reqAddOrUpdateShopCart(skuId, skuNum);
        //判断加入购物车是否成功
        if (result.code == 200) {
            return "OK"
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    //删除购物车的商品
    async getDeleteCartById({ commit }, skuId) {
        let result = await reqDeleteCartById(skuId)
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
        // console.log(skuId);
    },
    deleteAllCheckedCart({ dispatch, getters }) {
        let PromiseAll = [];
        getters.cartList.cartInfoList.forEach(item => {
            let promise = item.isChecked == "1" ? dispatch("getDeleteCartById", item.skuId) : '';
            PromiseAll.push(promise);
        });
        console.log(Promise.all(PromiseAll));
        return Promise.all(PromiseAll)
    }
};


//mutations：修改state的唯一手段
const mutations = {

    //categoryList的数据
    GOODINFO(state, goodInfo) {
        state.goodInfo = goodInfo;
    },
};

//state:仓库存储数据的地方
const state = {
    goodInfo: [],
    uuid_token: getUUID()
};

//getters：理解为计算属性，可以简化仓库数据，让组件获取仓库的数据更加方便
const getters = {
    categoryView(state) {
        return state.goodInfo.categoryView || {}
    },
    skuInfo(state) {
        return state.goodInfo.skuInfo || {}
    },
    spuSaleAttrList(state) {
        return state.goodInfo.spuSaleAttrList || {}
    }
};



export default {
    actions,
    mutations,
    state,
    getters,
}
